//public class Test_4_3 {
//    public static void main(String[] args) {

        //1.12 理解类型转换
/*        int c = 10;
        double d = 23.5;
        c = d;//编译直接报错
        d = c;//编译通过*/

      /*  int a = 10;
        long b = 20;
        //a = b;//编译直接报错
        b = a;//编译通过
        */

      //  int 和 boolean 相互赋值
/*        int a = 10;
        boolean num = true;
        a = num;
        num = a;*/

        //int字面值常量 给 byte 赋值
/*

        byte num = 10;//没事
        byte num2 = 127;//没事 0111 1111 = 127
        byte num3 = 128;//编译报错
        byte num4 = -128;//没事 1111 1111 = -128
        byte num5 = -129;//编译报错
*/
        //使用强制类型转换

       /* int a = 0;
        double b = 10.24;
       // a = b;//直接赋值会报错 大范围 不能直接给 小范围
        a = (int)b;
        System.out.println(a);//10 精度丢失*/

 /*       int a = 10;
        boolean num = false;
        num = (boolean)a;
        a = (int)num;
*/

       // 1.13 理解数值提升
        //int 和 long 混合运算：

//        int a = 10;
//        long b = 20;
//        int c = a + b;// 编译出错, 提示将 long 转成 int 会丢失精度
//        long d = a + b;//编译通过
//        System.out.println(d);//30

        //byte 和 byte 的运算
//        byte num1 = 10;
//        byte num2 = 20;
//        // byte num3 = num1 + num2;//编译报错
//        byte num3 = (byte)(num1 + num2);//将返回值强制转换成 byte
//        System.out.println(num3);//30

//        int a = 10;
//        double b = 20.0;
//        int c = (int)(a + b);

        //1.14 int 和 String 之间的相互转换
//        int num = 10;
//        // 方法1
//        String str1 = num + "abc";
//        System.out.println(str1);//输出：10abc
//        // 方法2
//        String str2 = String.valueOf(num);
//        System.out.println(str1);//输出：10abc

        //String 转成 int
//        String str = "123";
//        int num = Integer.parseInt(str);
//        System.out.println(num);//输出 123

        //运算符
//        double a = 15.6;
//        System.out.println(a % 10);//5.6

        //增量赋值运算
//        int a = 10;
//        int b = ++a;
//        int c = a++;
//        System.out.println(a);//12
//        System.out.println(b);//11
//        System.out.println(c);//11

//       int a = 10 >= 20;//报错，因为 关系运算符的表达式返回值都是 boolean 类型
//        boolean b = 10 >= 20;
//        System.out.println(b);//false

        //逻辑或
//        int a = 10;
//        int b = 20;
//        int c = 30;
//        System.out.println(a < b || b < c);//true

        //非逻辑
//        int a = 10;
//        int b = 20;
//        System.out.println( !(a < b) );//false

//        //短路求值
//        System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false
//        System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true

//        System.out.println(10 > 20 & 10 / 0 == 0); // 程序抛出异常
//        System.out.println(10 < 20 | 10 / 0 == 0); // 程序抛出异常

//    }
//}

//public class Test_4_3 {
//    public static void main(String[] args) {

//        int a = 10;//1010
//        int b = 3;//0011
//
//        System.out.println(10 > 20 & 10 / 2 == 0);//boolean 值
//        System.out.println(a & b);//0010 2

        //按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
//        int a = 0xf;//最低位是 f 其他位都是 0
//        System.out.printf("%x\n", ~a);//fffffff0


        //按位异或 ^
//        int a = 12;//1100
//        int b = 11;//1011
//           //a ^ b = 0111 = 7
//        System.out.println(a ^ b);//7

//        final int a;
//        a = 10;

//        boolean a =true;
//        String b = "abc" + a;
//        System.out.println(b);

        //字符也可以异或
//        char b = 'a';
//        char c = 'b';
//        char d = 'a';
//        char num = (char)98;
//        System.out.println(b ^ c ^ d);//98
//        System.out.println(num);//b

        //位移操作符
//        int a = 4;//0100
//        a = a << 1;
//        System.out.println(a);//8 = 1000

//        int a = 8;//0 1000
//        int b = -8;//1 ..1000
//        a = a >> 1;
//        b = b >> 1;
//        System.out.println(a);//4   0 0100
//        System.out.println(b);//-4  1..0100

//        int a = 0xffffffff;
//        a = a >>> 1;
//        System.out.printf("%x\n", a);//7fffffff

        // 求两个整数的最大值
//        int a = 10;
//        int b = 20;
//        int max = a > b ? a : b;
//        System.out.println(max);//20

//        int a = 10;
//        int b = 20;
//        int max = 0;
//
//        if(a > b)
//            max = a;
//        else
//            max = b;
//        System.out.println(max);//20
//
//        int a = -2;//1.00010原码
//        //1...11101反码
//        //1...1110补码
//        //0...0001取反
//        System.out.println(~a);//0.0001

        //两位数中 num 9 出现的次数
//        int num = 10;
//        int conut = 0;
//        for(int i = num; i < 100; i++)
//        {
//            if(i % 10 == 9)
//            {
//                conut++;
//                System.out.println(i);
//            }
//            if(i / 10 == 9)
//            {
//                conut++;
//                System.out.println(i);
//            }
//        }
//        System.out.println(conut);//19

//        int num = 1;
//        int sum = 0;
//        while(num <= 10)
//        {
//            sum += num;
//            num++;
//        }
//        System.out.println(sum);//55

//        int a = 10;
//        int b = 20;
//        System.out.println("a + b");

        // 1到5的阶层 和是多少
//        int num = 1;
//        int rep = 1;
//        long sum = 1;
//        while(num <= 5)
//        {
//            rep *= num;
//            sum *= rep;
//            num++;
//        }
//        System.out.println(sum);//153

//        for (int i = 0; i < ; i++) {
//
//        }
//    }
//}

//public class Test_4_3 {
//    public static void main(String[] args){
//
//        int a = Integer.MAX_VALUE;//整形最大值
//        System.out.println(a);//2147483647
//        long b = a + 1;
//        System.out.println(b);//-2147483648
//        long c = a + 1L;
//        System.out.println(c);//2147483648
//
//    }
//}